<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>
<body>


    <script>
        // Array  数组构造函数
        // Array.prototype 构造函数的属性（原型/原型对象）
        console.log(typeof Array.prototype); // object


        // 原型对象
        Array.prototype 
        // 控制台输出数组构造函数的原型对象
        // console.log(Array.prototype);

        // 实例对象： 
        // var arr = new Array("red");
        var arr = ["red"];
        // 添加数据
        arr.push("green");
        arr.push("blue");
        // console.log(arr);

        


        // 总结：
            // 不同的构造函数有不同的实例对象
            // 不同的构造函数有不同的原型对象
            // 实例对象可以引用原型对象上的属性和方法
    
        // 举例：
      
        // Array.prototype.foo = function(){
        //     console.log("这是挂载数组构造函数原型上的foo方法");
        // }
        // var arr2 = [];
        // arr2.foo();

        // 数组去重：
        // 构造函数.原型.方法名称 = function(){}
        Array.prototype.myUnique = function(){
            // console.log(this);// ["aaa","bbb","aaa","bbb","ccc"]
            var obj = {}
            var result = [];
            for(var i = 0 ; i < this.length ; i ++){
                if(obj[ this[i] ] == undefined){
                    result.push(this[i]);
                    obj[ this[i] ] = 1;
                }
            }
            return result;
        }
        // 实例对象
        // var arr3 = ["aaa","bbb","aaa","bbb","ccc"];// 写法1
        var arr3 = new Array("aaa","bbb","aaa","bbb","ccc");// 写法2

        var res3 = arr3.myUnique();
        console.log(res3);// ["aaa", "bbb", "ccc"]


        // 狠狠的把以下这段话给记住！
        // 实例对象(arr) 首先在构造函数作用域中检索（查找），是否存在当前这个方法（myUnique）
        // 如果构造函数作用域存在这个方法（myUnique），那么直接调用这个方法
        // 如果构造函数作用域不存在这个方法（myUnique），那么就会到原型对象上检索（查找），存在，则调用
        // 如果构造函数原型对象上也不存这个方法(myUnique)，那么就会到 Object构造函数的原型检索(查找)，存在，则调用
        // 如果以上对象都不存在这个方法(myUnique)，那就报错了。
          
       



    </script>
</body>
</html>